package com.tcp;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 1. TCP 服务器端
 */
public class SocketTCP01Server {

    public static void main(String[] args) throws IOException {
        // 1. 在本机中监听 9999 端口
        // 要求本机上，没有其他服务监听 9999 端口
        // 细节：这个 ServerSocket 可以通过 accept()返回多个 socket【多个客户端来连接服务器的并发】,
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("服务器端监听9999端口，等待链接.......");
        // 2. 当没有客户端链接9999端口时，程序会阻塞
        // 如果有客户端链接了，则会返回一个socket对象，然后程序往下执行
        Socket socket = serverSocket.accept();
        System.out.println("客户端 socket = " + socket.getClass());
        System.out.println("客户端已经链接了.........");

        // 3. 通过 socket.getInputstream()读取客户端发送到 socket通道中的数据
        InputStream inputStream = socket.getInputStream();
        byte[] buf = new byte[1024];
        int read = 0;
        while ((read = inputStream.read(buf))!=-1){
            // 根据读取到的实际长度，显示内容
            System.out.println(new String(buf , 0 ,read));
        }

        // 4. 读取数据之后，服务器端必须关闭流
        inputStream.close();
        socket.close();
        serverSocket.close();
    }
}
